草庐IT

c++ - RAII 和 C++ STL

全部标签

c++ - 为什么大多数 STL 实现中的代码如此复杂?

STL是C++世界的关键部分,大多数实现源自Stepanov和Musser的初步努力。我的问题是代码的重要性,它是人们出于敬畏和学习目的查看编写良好的C++示例的主要来源之一:为什么STL的各种实现看起来如此恶心-从美学的角度来看,如何不编写C++代码的复杂且通常很好的示例。下面的代码示例在我工作过的地方无法通过代码审查,原因多种多样,包括变量命名、布局、宏和运算符的使用,这些需要不仅仅是一眼就能弄清楚实际发生了什么。templateinlinebool_Next_permutation(_BidIt_First,_BidIt_Last){//permuteandtestforpure

【C++】STL简介 及 string的使用

文章目录1.STL简介1.1什么是STL1.2STL的版本1.3STL的六大组件2.string类的使用2.1C语言中的字符串2.2标准库中的string类2.3string类的常用接口说明1.string类对象的常见构造2.string类对象的容量操作3.string类对象的修改操作4.`resize`和`reserve`5.认识迭代器(正向)6.反向迭代器7.const迭代器(正向&反向)8.元素访问9.insert和erase10.replace、find、rfind、substr11.swap与string::swap12.c_str13.getline2.4总结1.STL简介1.1什

【C++】STL简介 及 string的使用

文章目录1.STL简介1.1什么是STL1.2STL的版本1.3STL的六大组件2.string类的使用2.1C语言中的字符串2.2标准库中的string类2.3string类的常用接口说明1.string类对象的常见构造2.string类对象的容量操作3.string类对象的修改操作4.`resize`和`reserve`5.认识迭代器(正向)6.反向迭代器7.const迭代器(正向&反向)8.元素访问9.insert和erase10.replace、find、rfind、substr11.swap与string::swap12.c_str13.getline2.4总结1.STL简介1.1什

c++ - 如何创建 Min STL priority_queue?

默认的STL优先级队列是Maxone(Top函数返回最大的元素)。为简单起见,说它是一个int值的优先级队列。 最佳答案 使用std::greater作为比较函数:std::priority_queue,std::greater>my_min_heap; 关于c++-如何创建MinSTLpriority_queue?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2439283/

c++ - 如何创建 Min STL priority_queue?

默认的STL优先级队列是Maxone(Top函数返回最大的元素)。为简单起见,说它是一个int值的优先级队列。 最佳答案 使用std::greater作为比较函数:std::priority_queue,std::greater>my_min_heap; 关于c++-如何创建MinSTLpriority_queue?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2439283/

c++ - C++ 中的 RAII 和智能指针

在C++实践中,什么是RAII,什么是smartpointers,这些是如何在程序中实现的,使用带有智能指针的RAII有什么好处? 最佳答案 RAII的一个简单(可能是过度使用)示例是File类。如果没有RAII,代码可能如下所示:Filefile("/path/to/file");//Dostuffwithfilefile.close();换句话说,我们必须确保在完成文件后将其关闭。这有两个缺点-首先,无论我们在哪里使用File,我们都必须调用File::close()-如果我们忘记这样做,我们会比需要的时间更长地保留文件。第二个

c++ - C++ 中的 RAII 和智能指针

在C++实践中,什么是RAII,什么是smartpointers,这些是如何在程序中实现的,使用带有智能指针的RAII有什么好处? 最佳答案 RAII的一个简单(可能是过度使用)示例是File类。如果没有RAII,代码可能如下所示:Filefile("/path/to/file");//Dostuffwithfilefile.close();换句话说,我们必须确保在完成文件后将其关闭。这有两个缺点-首先,无论我们在哪里使用File,我们都必须调用File::close()-如果我们忘记这样做,我们会比需要的时间更长地保留文件。第二个

c++ - STL 中的 vector 与列表

我在EffectiveSTL中注意到vectoristhetypeofsequencethatshouldbeusedbydefault.这是什么意思?似乎忽略效率vector可以做任何事情。谁能给我一个vector不是可行选项但必须使用list的场景? 最佳答案 vector:连续内存。为future的元素预先分配空间,因此需要的额外空间超出了元素本身所需的空间。每个元素只需要元素类型本身的空间(不需要额外的指针)。可以在添加元素的任何时候为整个vector重新分配内存。最后的插入是固定的、摊销的时间,但其他地方的插入是一个代价高

c++ - STL 中的 vector 与列表

我在EffectiveSTL中注意到vectoristhetypeofsequencethatshouldbeusedbydefault.这是什么意思?似乎忽略效率vector可以做任何事情。谁能给我一个vector不是可行选项但必须使用list的场景? 最佳答案 vector:连续内存。为future的元素预先分配空间,因此需要的额外空间超出了元素本身所需的空间。每个元素只需要元素类型本身的空间(不需要额外的指针)。可以在添加元素的任何时候为整个vector重新分配内存。最后的插入是固定的、摊销的时间,但其他地方的插入是一个代价高

c++ - 为什么 C++ STL 如此大量地基于模板? (而不是在*接口(interface)*上)

我的意思是,除了它的强制性名称(标准模板库)...C++最初打算将OOP概念呈现到C中。也就是说:您可以根据其类和类层次结构来判断特定实体可以做什么和不能做什么(无论它如何做)。由于多重继承的问题,以及C++以某种笨拙的方式支持接口(interface)概念的事实(与java等相比),一些能力的组合更难以用这种方式描述,但它就在那里(并且可能是改进)。然后模板和STL一起发挥了作用。STL似乎采用了经典的OOP概念并将它们冲入下水道,而是使用模板。当使用模板来泛化类型本身与模板(例如容器)的操作无关的类型时,应该区分情况。有一个vector完全有道理。然而,在许多其他情况下(迭代器和算